package com.suneast.suneaststore.util.net.upload;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.suneast.suneaststore.API;
import com.suneast.suneaststore.app.AccountManager;
import com.suneast.suneaststore.util.log.LatteLogger;
import com.suneast.suneaststore.util.net.RestClient;

import java.io.File;

public class UploadHandler {
    private static CloudStorageVendor storageVendor;

    static {
        storageVendor = QiNiuCloud.get();
    }

    // TODO 开个线程维护token
    private static String token;

    public static void requestToken() {
        RestClient.builder()
                .url(API.REQUEST_QINIU_UPLOAD_AUTH)
                .params("token", AccountManager.getToken())
                .success((String response) -> {
                    JSONObject rootObj = JSON.parseObject(response);
                    if (rootObj != null && rootObj.getIntValue("code") == 1) {
                        JSONObject dataObj = rootObj.getJSONObject("data");
                        token = dataObj.getString("token");
                        LatteLogger.d("test", "requestToken token =" + token);
                    } else {
                        LatteLogger.e("error",
                                "requestToken response success ,but data error");
                    }
                })
                .error((int code, String msg) -> {
                    LatteLogger.e("error",
                            "requestToken error code =" + code + " msg = " + msg);
                })
                .failure(() -> {
                    LatteLogger.e("error", "requestToken failure");
                })
                .build()
                .post();
    }

    /**
     * 生成服务器端唯一标识
     * @param path 要上传的文件路径
     * @return key
     */
    public static String generateKey(String path) {
        return String.valueOf(System.currentTimeMillis()) + "_" + new File(path).getName();
    }

    /**
     * 生成服务器端唯一标识
     * @param file 要上传的文件
     * @return key
     */
    public static String generateKey(File file) {
        return String.valueOf(System.currentTimeMillis()) + "_" + file.getName();
    }

    /**
     * 上传文件 建议使用者使用generateKey方法先自己生成key, 这样可以保存并在结果来了的时候比对key
     * @param path 路径
     */
    @Deprecated
    public static void upload(String path) {
        storageVendor.store(new File(path), token, generateKey(path));
    }

    /**
     * 上传文件
     * @param path 路径
     * @param key, 服务器端的文件唯一标识
     */
    public static void upload(String path, String key) {
        storageVendor.store(new File(path), token, key);
    }

    /**
     * 上传文件
     * @param file 文件
     * @param key, 服务器端的文件唯一标识
     */
    public static void upload(File file, String key) {
        storageVendor.store(file, token, key);
    }

    /**
     * 取消上传文件
     *
     * @param key 文件的标识
     */
    public static void cancel(String key) {
        storageVendor.cancel(key);
    }
}